/**
 * 本地存储工具类
 * 封装 localStorage 和 sessionStorage 操作
 */

const TOKEN_KEY = 'vilan_admin_token'
const USER_INFO_KEY = 'vilan_admin_user_info'
const ROUTES_KEY = 'vilan_admin_routes'

/**
 * localStorage 操作
 */
export const storage = {
  /**
   * 设置存储
   * @param {string} key 键名
   * @param {any} value 值
   */
  set(key, value) {
    try {
      const jsonValue = JSON.stringify(value)
      localStorage.setItem(key, jsonValue)
    } catch (error) {
      console.error('Storage set error:', error)
    }
  },
  
  /**
   * 获取存储
   * @param {string} key 键名
   * @param {any} defaultValue 默认值
   * @returns {any}
   */
  get(key, defaultValue = null) {
    try {
      const value = localStorage.getItem(key)
      return value ? JSON.parse(value) : defaultValue
    } catch (error) {
      console.error('Storage get error:', error)
      return defaultValue
    }
  },
  
  /**
   * 移除存储
   * @param {string} key 键名
   */
  remove(key) {
    try {
      localStorage.removeItem(key)
    } catch (error) {
      console.error('Storage remove error:', error)
    }
  },
  
  /**
   * 清空所有存储
   */
  clear() {
    try {
      localStorage.clear()
    } catch (error) {
      console.error('Storage clear error:', error)
    }
  }
}

/**
 * sessionStorage 操作
 */
export const sessionStorage = {
  /**
   * 设置会话存储
   * @param {string} key 键名
   * @param {any} value 值
   */
  set(key, value) {
    try {
      const jsonValue = JSON.stringify(value)
      window.sessionStorage.setItem(key, jsonValue)
    } catch (error) {
      console.error('SessionStorage set error:', error)
    }
  },
  
  /**
   * 获取会话存储
   * @param {string} key 键名
   * @param {any} defaultValue 默认值
   * @returns {any}
   */
  get(key, defaultValue = null) {
    try {
      const value = window.sessionStorage.getItem(key)
      return value ? JSON.parse(value) : defaultValue
    } catch (error) {
      console.error('SessionStorage get error:', error)
      return defaultValue
    }
  },
  
  /**
   * 移除会话存储
   * @param {string} key 键名
   */
  remove(key) {
    try {
      window.sessionStorage.removeItem(key)
    } catch (error) {
      console.error('SessionStorage remove error:', error)
    }
  },
  
  /**
   * 清空所有会话存储
   */
  clear() {
    try {
      window.sessionStorage.clear()
    } catch (error) {
      console.error('SessionStorage clear error:', error)
    }
  }
}

/**
 * Token 相关操作
 */
export function getToken() {
  return storage.get(TOKEN_KEY)
}

export function setToken(token) {
  return storage.set(TOKEN_KEY, token)
}

export function removeToken() {
  return storage.remove(TOKEN_KEY)
}

/**
 * 用户信息相关操作
 */
export function getUserInfo() {
  return storage.get(USER_INFO_KEY)
}

export function setUserInfo(userInfo) {
  return storage.set(USER_INFO_KEY, userInfo)
}

export function removeUserInfo() {
  return storage.remove(USER_INFO_KEY)
}

/**
 * 路由信息相关操作
 */
export function getRoutes() {
  return storage.get(ROUTES_KEY)
}

export function setRoutes(routes) {
  return storage.set(ROUTES_KEY, routes)
}

export function removeRoutes() {
  return storage.remove(ROUTES_KEY)
}

/**
 * 清空所有认证相关信息
 */
export function clearAuth() {
  removeToken()
  removeUserInfo()
  removeRoutes()
}

